BOJ_14503_로봇청소기

브루트포스로 while 문 안에서 청소기를 돌리는 구현 문제
시간 복잡도는 O(MxNx4) 인데 M과 N이 최대 50이기 때문에 대략 10000번의 연산이 일어난다

dx = [-1, 0, 1, 0]  
dy = [0, 1, 0, -1]  
N, M = list(map(int, input().split()))  
x, y, d = list(map(int, input().split()))  
  
room = [list(map(int, input().split())) for _ in range(N)]  
visited = [[False] * M for _ in range(N)]  
cnt = 0  
  
while True:  
    # 현재 자리 탐색  
    if not visited[x][y]:  
        visited[x][y] = True  
        cnt += 1  
  
    # 사방 탐색  
    flag = False  
    temp_dir = d  
    for i in range(1, 5):  
  
        temp_dir = 3 if temp_dir - 1 < 0 else temp_dir - 1  
        nx = x + dx[temp_dir]  
        ny = y + dy[temp_dir]  
  
        if nx < 0 or ny < 0 or nx >= N or ny >= M or room[nx][ny] == 1 or visited[nx][ny]:  
            continue  
  
        x = nx  
        y = ny  
        d = temp_dir  
        flag = True  
        break  
    if not flag:  
        nx = x - dx[d]  
        ny = y - dy[d]  
  
        if nx < 0 or ny < 0 or nx >= N or ny >= M or room[nx][ny] == 1:  
            break  
  
        x = nx  
        y = ny  
  
print(cnt)